package cn.com.generaldata.jsme_indicator_system.util;

import java.util.EnumSet;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.google.common.collect.Maps;

/**
 * 系统常量类.
 */
public abstract class Constants {

	/** 指标数据类型常量 */
	public enum IndicatorDataType {
		/** 数值型 */
		NUMBER(1),
		/** 字符型 */
		STRING(2);
		private final int value;

		private IndicatorDataType(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}
	}

	/** 指标数据类型常量 */
	public enum ReportStyle {
		/** 单元格式 */
		CELL(1),
		/** 行式 */
		ROW(2);
		private final int value;

		private ReportStyle(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}
	}

	/** 统计制度类型常量 */
	public enum ReportStatSystem {
		/** 海统 */
		STAT(1),
		/** 海核 */
		ACCOUNTING(2),
		/** 省统计制度 */
		PROVINCE(3),
		/** 用海企业调查表 */
		USE_MARINE(4),
		/** 管委会调查表 **/
		MC(5);
		private final int value;

		private ReportStatSystem(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}

		public static ReportStatSystem queryByVal(int val) {
			ReportStatSystem rss = null;
			for (ReportStatSystem reportStatSystem : ReportStatSystem.values()) {
				if (reportStatSystem.getValue() == val) {
					rss = reportStatSystem;
					break;
				}
			}
			return rss;
		}
	}

	/** 监测频率月 */
	public static final Integer REPORT_TIME_MONTH = 0;
	/** 监测频率年 */
	public static final Integer REPORT_TIME_YEAR = 1;
	/**半年报*/
	public static final Integer REPORT_HALF_YEAR = 1;
	/**全年报*/
	public static final Integer REPORT_FULL_YEAR = 2;
	/** 监测频率季 */
	public static final Integer REPORT_TIME_QUARTER = 2;
	/** 监测频率半年 */
	public static final Integer REPORT_TIME_HALF_YEAR = 3;
	//指标体系的
	/** 监测频率全年报 */
	public static final String INDICATOR_FULL_YEAR = "1";
	/** 监测频率半年报 */
	public static final String INDICATOR_HALF_YEAR = "2";
	/** 监测频率季 */
	public static final String INDICATOR_TIME_QUARTER = "3";
	/** 监测频率月 */
	public static final String INDICATOR_TIME_MONTH = "4";
	/** 监测频率临时 */
	public static final String INDICATOR_TIME_TEMP = "5";
	//填报
	public static final String SUBMIT = "1";
	//迟报
	public static final String DELAY = "2";
	//修改
	public static final String UPDATE = "3";
	//查看
	public static final String DETAIL = "4";
	//迟报状态
	public static final Integer DELAY_STATUS = 0;
	//修改状态
	public static final Integer UPDATE_STATUS = 1;

	public static final int DAY_REPORT = 6; // 日度
	public static final int WEEK_REPORT = 5; // 周度
	public static final int TEN_REPORT = 4; // 旬度
	public static final int QUARTER_REPORT = 2; // 季度
	public static final int MONTH_REPORT = 0; // 月度
	public static final int HALF_YEAR = 3; // 半年度
	public static final int FULL_YEAR = 1; // 年度

	public static final Map<Integer, Integer> REPORT_INDICATOR_FREQUENCY = Maps.newHashMapWithExpectedSize(3);
	static {
		REPORT_INDICATOR_FREQUENCY.put(REPORT_TIME_MONTH, 4);
		REPORT_INDICATOR_FREQUENCY.put(REPORT_TIME_YEAR, 1);
		REPORT_INDICATOR_FREQUENCY.put(REPORT_TIME_QUARTER, 3);
	}

	/** 省指标数据来源常量 - 涉海企业 */
	public static final int INDICATOR_DATASOURCE_UNIT = 2;
	/** 省指标数据来源常量 - 海洋行政管理部门 */
	public static final int INDICATOR_DATASOURCE_ADMIN = 1;

	/** 省指标数据来源涉海企业范围 - 本级 */
	public static final int UNIT_SCOPE_CURRENT_LEVEL = 1;
	/** 省指标数据来源涉海企业范围 - 所有 */
	public static final int UNIT_SCOPE_ALL_LEVEL = 2;

	/** 核算指标引用指标类型 */
	public enum IndicatorAccountingReferenceType {
		/** 海统 */
		SYSTEM_REPORT(1),
		/** 海核 */
		ACCOUNTING_REPORT(2),
		/** 省统计制度 */
		PROVINCE(3),
		/** 用户录入 */
		INPUT(4),
		/** 核算指标 */
		ACCOUNTING(5),
		/** 引用指标组 */
		INDICATOR_GROUP(6);
		private final int value;

		private IndicatorAccountingReferenceType(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}
	}

	/** 评估指标级别 **/
	/** 评估指标级别 - 省级 **/
	public static final int INDICATOR_LEVEL_PROVINCE = 1;
	/** 评估指标级别 - 市级 **/
	public static final int INDICATOR_LEVEL_CITY = 2;
	/** 评估指标级别 - 县级 **/
	public static final int INDICATOR_LEVEL_COUNTY = 4;
	/** 评估指标级别 - 国家 **/
	public static final int INDICATOR_LEVEL_NATION = 5;

	public static final int YES = 1;
	public static final int NO = 0;

	//登记注册类型
	public static final String ZCLX = "与港澳台商合作经营,与港澳台商合资经营,中外合作经营,中外合资经营,其他外商投资,其他有限责任公司,其他营联,国有,国有与集体营联,国有独资企业,国有营联,外商投资股份有限公司,外资企业,港澳台商投资股份有限公司,港澳台商独资,私营合伙,私营有限责任公司,私营独资,私营股份有限公司,股份合作,股份有限公司,集体,集体联营,其他";

	/**
	 * 指标类型
	 */
	public enum INDICATORTYPE {
		/**
		 * 当期
		 */
		CURRENT("CR", "current"),
		/**
		 * 当期累计
		 */
		CURRENTTOTAL("CA", "current_total"),
		/**
		 * 上期
		 */
		PRIOR("PR", "prior"),
		/**
		 * 上期累计
		 */
		PRIORTOTAL("PA", "prior_total"),

		/**
		 * 上年
		 */
		LASTCURRENT("LR", "last_year_current"),

		/**
		 * 上年累计
		 */
		LASTTOTAL("LA", "last_year_current_total");

		private final String _code;
		private final String _desc;

		private INDICATORTYPE(String code, String desc) {
			_code = code;
			_desc = desc;
		}

		@Override
		public String toString() {
			return _code;
		}

		public String getCode() {
			return _code;
		}

		public String getDesc() {
			return _desc;
		}

		public static INDICATORTYPE parse(String code) {
			if (!StringUtils.isBlank(code)) {
				EnumSet<INDICATORTYPE> enumSet = EnumSet.allOf(INDICATORTYPE.class);
				for (INDICATORTYPE s : enumSet) {
					if (s.getCode().equals(code))
						return s;
				}
			}
			throw new IllegalArgumentException("Illegal FrequencyCode! [" + code + "]");
		}
	}
}
